package com.sharelords.demo.common.base.client;

import com.sharelords.demo.common.result.ServiceResult;

import java.util.List;

/**
 * @Description: 公用client组件
 *
 * @Author: 千古龙少
 * @Time: 2019/12/7 19:55
 */
public interface BaseClient<Ao, D> {

	/**
	 * 数据保存（保存null），并返回成功条数
	 *
	 * @Author: 千古龙少
	 * @Time: 2019/12/7 19:53
	 * @param ao
	 * @return com.sharelords.demo.common.result.ServiceResult<java.lang.Integer>
	 */
	ServiceResult<Integer> save(Ao ao);
	
	/**
	 * 数据保存(不保存null)，并返回成功条数
	 *
	 * @Author: 千古龙少
	 * @Time: 2019/12/7 19:53
	 * @param ao
	 * @return com.sharelords.demo.common.result.ServiceResult<java.lang.Integer>
	 */
	ServiceResult<Integer> saveSelective(Ao ao);
	
	/**
	 * 数据更新(保存null)
	 *
	 * @Author: 千古龙少
	 * @Time: 2019/12/7 19:53
	 * @param ao
	 * @return com.sharelords.demo.common.result.ServiceResult<java.lang.Integer>
	 */
	ServiceResult<Integer> update(Ao ao);
	
	/**
	 * 数据更新(不保存null)
	 *
	 * @Author: 千古龙少
	 * @Time: 2019/12/7 19:54
	 * @param ao
	 * @return com.sharelords.demo.common.result.ServiceResult<java.lang.Integer>
	 */
	ServiceResult<Integer> updateSelective(Ao ao);
	
	/**
	 * 物理删除记录
	 *
	 * @Author: 千古龙少
	 * @Time: 2019/12/7 19:54
	 * @param id
	 * @return com.sharelords.demo.common.result.ServiceResult<java.lang.Integer>
	 */
	ServiceResult<Integer> deletePhysically(D id);
	
	/**
	 * 根据主键查询详情
	 *
	 * @Author: 千古龙少
	 * @Time: 2019/12/7 19:54
	 * @param id
	 * @return com.sharelords.demo.common.result.ServiceResult<Ao>
	 */
	ServiceResult<Ao> queryByPrimaryKey(D id);
	
	/**
	 * 根据数据模型对象查询列表
	 *
	 * @Author: 千古龙少
	 * @Time: 2019/12/7 19:54
	 * @param ao
	 * @return com.sharelords.demo.common.result.ServiceResult<java.util.List<Ao>>
	 */
	ServiceResult<List<Ao>> queryByAo(Ao ao);
	
	/**
	 * 查询所有记录
	 *
	 * @Author: 千古龙少
	 * @Time: 2019/12/7 19:54
	 * @param
	 * @return com.sharelords.demo.common.result.ServiceResult<java.util.List<Ao>>
	 */
	ServiceResult<List<Ao>> queryAll();
	
	/**
	 * 根据主键批量查询记录列表
	 *
	 * @Author: 千古龙少
	 * @Time: 2019/12/7 19:54
	 * @param idList
	 * @return com.sharelords.demo.common.result.ServiceResult<java.util.List<Ao>>
	 */
	ServiceResult<List<Ao>> queryReCordsByIdList(List<D> idList);
	
}
